﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace sy5_14
{
    public partial class Form1 : Form
    {
        private Bitmap randomImage; // 存储生成的随机图像
        public Form1()
        {
            InitializeComponent();
            this.Text = "随机图形";
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void BtnGenerate_Click(object sender, EventArgs e)
        {
            try
            {
                // 1. 获取输入的图像分辨率
                int width = int.Parse(txtWidth.Text);
                int height = int.Parse(txtHeight.Text);

                // 2. 创建指定大小的Bitmap作为画布
                randomImage = new Bitmap(width, height);
                Graphics g = Graphics.FromImage(randomImage);
                g.SmoothingMode = SmoothingMode.AntiAlias; // 抗锯齿

                // 3. 随机数对象（用于生成位置、颜色、大小、角度、字符）
                Random ran = new Random();

                // 4. 定义字符集（大小写字母+数字）
                string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

                // 5. 循环生成多个随机字符（数量可调整，这里生成200个）
                for (int i = 0; i < 200; i++)
                {
                    // 随机字符
                    char c = chars[ran.Next(chars.Length)];
                    // 随机位置（x:0~width, y:0~height）
                    int x = ran.Next(width);
                    int y = ran.Next(height);
                    // 随机字体大小（10~30）
                    int fontSize = ran.Next(10, 31);
                    Font font = new Font("Arial", fontSize, FontStyle.Bold);
                    // 随机颜色（ARGB，Alpha=255不透明）
                    Color color = Color.FromArgb(ran.Next(256), ran.Next(256), ran.Next(256));
                    SolidBrush brush = new SolidBrush(color);
                    // 随机角度（0~360度）
                    float angle = ran.Next(0, 361);

                    // 6. 绘制旋转后的字符
                    g.TranslateTransform(x, y); // 平移到随机位置
                    g.RotateTransform(angle); // 旋转随机角度
                    g.DrawString(c.ToString(), font, brush, -fontSize / 2, -fontSize / 2); // 居中绘制
                    g.ResetTransform(); // 重置坐标系

                    // 释放资源
                    font.Dispose();
                    brush.Dispose();
                }

                // 7. 在PictureBox中显示生成的图像（按比例缩放）
                pictureBox1.Image = randomImage;
                pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;

                g.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show($"输入错误：{ex.Message}", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void BtnSave_Click(object sender, EventArgs e)
        {
            if (randomImage == null)
            {
                MessageBox.Show("请先点击“产生”生成图像！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            // 设置保存对话框的格式
            saveFileDialog1.Filter = "PNG图像|*.png|JPG图像|*.jpg|BMP图像|*.bmp";
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                // 保存Bitmap到指定路径
                randomImage.Save(saveFileDialog1.FileName);
                MessageBox.Show("图像保存成功！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
    }
}
